C Implementation File Compression and Decompression Method Example [ZIP Format]

  • 2021-12-19 06:30:03
  • OfStack

This paper describes the method of file compression and decompression by C #. Share it for your reference, as follows:

In the process of enterprise development, we often encounter file compression and decompression. Although many popular compressed file formats on the Internet are RAR, RAR is not an open standard, so ZIP has become the choice of more people. If you don't want to develop it yourself, you can choose open source projects, such as SharpZipLib, which is a good choice.

Component is relatively simple to use, please refer to the following code. Click to download the project source code.


/*
 * Gary Zhang -- cbcye@live.com
 * www.cbcye.com
 * www.quicklearn.cn
 * cbcye.cnblogs.com
 */
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using System.Diagnostics;
using ICSharpCode.SharpZipLib.Core;
namespace TestConsole
{
  class Program
  {
    static void Main()
    {
      //CreateZipFile(@"d:\", @"d:\a.zip");
      UnZipFile(@"d:\a.zip");
      Console.Read();
    }
    private static void CreateZipFile(string filesPath, string zipFilePath)
    {
      if (!Directory.Exists(filesPath))
      {
        Console.WriteLine("Cannot find directory '{0}'", filesPath);
        return;
      }
      try
      {
        string[] filenames = Directory.GetFiles(filesPath);
        using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))
        {
          s.SetLevel(9); //  Compression level  0-9
          //s.Password = "123"; //Zip Compressed file password 
          byte[] buffer = new byte[4096]; // Buffer size 
          foreach (string file in filenames)
          {
            ZipEntry entry = new ZipEntry(Path.GetFileName(file));
            entry.DateTime = DateTime.Now;
            s.PutNextEntry(entry);
            using (FileStream fs = File.OpenRead(file))
            {
              int sourceBytes;
              do
              {
                sourceBytes = fs.Read(buffer, 0, buffer.Length);
                s.Write(buffer, 0, sourceBytes);
              } while (sourceBytes > 0);
            }
          }
          s.Finish();
          s.Close();
        }
      }
      catch (Exception ex)
      {
        Console.WriteLine("Exception during processing {0}", ex);
      }
    }
    private static void UnZipFile( string zipFilePath)
    {
      if (!File.Exists(zipFilePath))
      {
        Console.WriteLine("Cannot find file '{0}'", zipFilePath);
        return;
      }
      using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
      {
        ZipEntry theEntry;
        while ((theEntry = s.GetNextEntry()) != null)
        {
          Console.WriteLine(theEntry.Name);
          string directoryName = Path.GetDirectoryName(theEntry.Name);
          string fileName = Path.GetFileName(theEntry.Name);
          // create directory
          if (directoryName.Length > 0)
          {
            Directory.CreateDirectory(directoryName);
          }
          if (fileName != String.Empty)
          {
            using (FileStream streamWriter = File.Create(theEntry.Name))
            {
              int size = 2048;
              byte[] data = new byte[2048];
              while (true)
              {
                size = s.Read(data, 0, data.Length);
                if (size > 0)
                {
                  streamWriter.Write(data, 0, size);
                }
                else
                {
                  break;
                }
              }
            }
          }
        }
      }
    }
  }
}

For more readers interested in C # related content, please check out the topics on this site: "C # Common Control Usage Tutorial", "WinForm Control Usage Summary", "C # Data Structure and Algorithm Tutorial", "C # Object-Oriented Programming Introduction Tutorial" and "C # Programming Thread Use Skills Summary"

I hope this article is helpful to everyone's C # programming.


Related articles: